################################################################################ 
#
# Counterspeech encouraging users to adopt the perspective of minority 
# groups reduces hate speech and its amplification on social media
#
# Attrition
#
################################################################################ 

rm(list = ls())

################################################################################ 
#  LIBRARIES
################################################################################ 

library(readxl)
library(xtable)
library(estimatr)
library(broom)
library(dplyr)


################################################################################ 
#   FOLDERS
################################################################################ 

wd = ''
wd_res = paste0(wd, '/results')
wd_data =  paste0(wd, '/data')

################################################################################ 
#   DATA
################################################################################ 

data = read.csv(paste0(wd_data, '/dataset_analysis.csv'))

################################################################################ 
#   Sources of attrition
################################################################################ 

table(data$suspended)
table(data$deleted)
table(data$protected)

################################################################################ 
#   Clean data for analysis
################################################################################ 

# attrition due users or twitter + 13 accounts lost due to human error
data$attrition_all = ifelse(data$user_deleted=='yes', 1, 0)

# attrition excluding human errors
data$attrition_nohum = ifelse(data$deleted +  data$suspended + data$protected==1, 1, 0)

# attrition due to users' actions
data$attrition_own = data$deleted + data$protected



################################################################################ 
#   Effect of treatment on attrition -OWN
################################################################################ 

outcome2 = lm_robust(attrition_own ~ traditional + analogical + perspective_getting + disapproval, data)
outcome2 = tidy(outcome2, std.error=T)

outcome2a = lm_robust(attrition_own ~ empathy + disapproval, data)
outcome2a = tidy(outcome2a, std.error=T)

################################################################################ 
#   Effect of treatment on Twitter suspension
################################################################################ 

outcome1 = lm_robust(suspended ~ traditional + analogical + perspective_getting + disapproval, data)
outcome1 = tidy(outcome1, std.error=T)

outcome1a = lm_robust(suspended ~ empathy + disapproval, data)
outcome1a = tidy(outcome1a, std.error=T)


################################################################################ 
#   Effect of treatment on attrition (own + twitter)
################################################################################ 

outcome3 = lm_robust(attrition_nohum ~ traditional + analogical + perspective_getting + disapproval, data)
outcome3 = tidy(outcome3, std.error=T)

outcome3a = lm_robust(attrition_nohum ~ empathy + disapproval, data)
outcome3a = tidy(outcome3a, std.error=T)

################################################################################ 
#   Effect of treatment on attrition (all)
################################################################################ 

outcome4 = lm_robust(attrition_all ~ traditional + analogical + perspective_getting + disapproval, data)
outcome4 = tidy(outcome4, std.error=T)

outcome4a = lm_robust(attrition_all ~ empathy + disapproval, data)
outcome4a = tidy(outcome4a, std.error=T)

